package com.keba.lamp.system.strategy.impl;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.keba.basic.context.ContextUtil;
import com.keba.lamp.common.constant.RoleConstant;
import com.keba.lamp.model.entity.base.SysRole;
import com.keba.lamp.model.enumeration.base.RoleCategoryEnum;
import com.keba.lamp.model.enumeration.system.DataTypeEnum;
import com.keba.lamp.system.mapper.RoleMapper;
import com.keba.lamp.system.strategy.InitSystemStrategy;
import com.keba.lamp.system.vo.save.tenant.DefTenantInitVO;

import java.util.ArrayList;
import java.util.List;

/**
 * 初始化系统
 * <p>
 * 初始化规则：
 * lamp-authority-server/src/main/resources/sql 路径存放8个sql文件 (每个库对应一个文件)
 * lamp_base.sql            # 基础库：权限、消息，短信，邮件，文件等
 * data_lamp_base.sql       # 基础库数据： 如初始用户，初始角色，初始菜单
 *
 * @author zuihou
 * @date 2019/10/25
 */
@Service("COLUMN")
@Slf4j
@RequiredArgsConstructor
public class ColumnInitSystemStrategy implements InitSystemStrategy {
    private final RoleMapper roleMapper;

    /**
     * 求优化！
     *
     * @param tenantInitVO 链接信息
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean initData(DefTenantInitVO tenantInitVO) {
        ContextUtil.setTenantBasePoolName(tenantInitVO.getId());
        List<SysRole> roles = new ArrayList<>();
        roles.add(SysRole.builder().code(RoleConstant.TENANT_ADMIN).name("租户管理员").readonly(true).remarks("内置管理员").state(true)
                .type(DataTypeEnum.SYSTEM.getCode()).category(RoleCategoryEnum.FUNCTION.getCode()).build());
        // 初始化数据
        roleMapper.insertBatchSomeColumn(roles);
        return true;
    }


    @Override
    public boolean reset(String tenant) {

        return true;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean delete(List<Long> ids) {
        return true;
    }
}
